package com.quanyan.stadium.service.gameLevelScore;

import com.quanyan.stadium.constants.GameConstants;

import java.util.List;

/**
 * Created by xiaoxiao on 16/11/11.
 *
 * 等级分抽象类
 *
 *
 */
public abstract class AbsGameLevelScore {

    public static byte FLAG_ALL = 0;
    public static byte FLAG_OWN = 1;
    public static byte FLAG_OPP = 2;
    public static double DEFAULT_FOLK_SCORE = 1000.00;

    public static int USER_OFFICIAL_SCORE_FACTOR_CLUB_NUM = 5;  //对手来自5个不同俱乐部
    public static int USER_OFFICIAL_SCORE_FACTOR_USER_NUM = 15; //15个不同官方分对手
    public static int USER_OFFICIAL_SCORE_FACTOR_EVENT_NUM = 5; //参与5次比赛(赛事)

    /**
     * 更新 用户/俱乐部的等级分
     *
     * @param ownId 用户或者俱乐部id
     * @param oppId 对手用户或者俱乐部id
     * @param score 比分
     * */
    public abstract void collectLScoreIncrement(List<Integer> ownId, List<Integer> oppId, String score, Integer gameEventId, Byte categoryId, Integer gameScheduleId);


    /**
     * 更新 用户/俱乐部的最新的 民间等级分(暗分)记录
     *
     * 当前选手是民间分: 与民间选手PK,影响自己的民间等级分,无论输赢;
     *                 与官方选手PK,赢了对方影响自己的分数波动;否则,不影响
     *
     * @param ownId 用户或者俱乐部id
     * @param oppId 对手用户或者俱乐部id
     * @param score 比分
     * */
    //public abstract void collectFLScoreIncrement(Integer ownId, Integer oppId, String score, Integer gameEventId, Integer categoryId, TbUserFLScore ownFlScore, Integer gameScheduleId);

    /**
     * 更新 用户/俱乐部的最新的 官方等级分(明分)记录
     *
     * 当前选手是官方分:  与官方选手PK,影响自己的民间等级分,无论输赢;
     *                  与民间选手PK,赢了对方不会影响自己的分数波动;否则,影响自己的分数,对方的分数按自己的分数计算
     *
     * @param ownId 用户或者俱乐部id
     * @param oppId 对手用户或者俱乐部id
     * @param score 比分
     * */
    //public abstract void collectOLScoreIncrement(Integer ownId, Integer oppId, String score, Integer gameEventId, Integer categoryId, Integer gameScheduleId);

    /**
     * 初始化 官方等级分
     *
     * @param ownId 用户或者俱乐部id
     * @param lScore 初始化官方等级分
     * @param categoryId 栏目id
     * */
    public abstract void initOLScore(Integer ownId, Double lScore, Byte categoryId);

    /**
     * 查询 用户/俱乐部的最新的 民间等级分(暗分)记录
     *
     * @param id 用户或者俱乐部id
     * */
    public abstract Object queryLatestFLScore(Integer id, Byte categoryId);


    /**
     * 查询 用户/俱乐部的最新的 官方等级分(明分)记录
     *
     * @param id 用户或者俱乐部id
     * */
    public abstract Object queryLatestOLScore(Integer id, Byte categoryId);

    /**
     * 民间等级分(暗分)自评
     *
     * @param id 用户或者俱乐部id
     * @param score 自评等级分大小
     * */
    public abstract void evalOwnFLScore(Integer id, Double score, Byte categoryId);


    /**
     * 获取评级的范围
     *
     * @param id 用户或者俱乐部id
     *
     * */
    public abstract List<Double> querySelfEvalRange(Integer id, Byte categoryId);

    /**
     * 获取等级分; 官方分存在按照官方分对象,否则查询民间分对象,都没取返回一个默认的民间积分对象
     *
     * @param id 用户或者俱乐部id
     *
     * */
    public abstract Object getObjectLScore(Integer id, Byte categoryId);


    /**
     * 校验分数的上下限
     *
     * @param currentLScore 当前等级分
     * @param incrementLScore 增量
     *
     * */
    public double finalLScore(double currentLScore, double incrementLScore, int categoryId) {
        double result = currentLScore + incrementLScore;
        if (categoryId != GameConstants.CATEGORY_ID_TENNIS) {
            if (result > 11000) {
                result = 11000;
            }else if (result < 1000) {
                result = 1000;
            }
        }else {
            if (result > 6000) {
                result = 6000;
            }else if (result < 1000) {
                result = 1000;
            }
        }

        return result;
    }

}
